home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.lang.c++
- Path: walter.cray.com!glover
- From: glover@tngstar41.cray.com (Roger Glover)
- Subject: Re: HELP: Virtual output stream functions
- Message-ID: <1996Mar27.172852.6932@walter.cray.com>
- Originator: root@tngstar41
- Nntp-Posting-Host: tngstar41.cray.com
- Organization: Cray Research, Inc.
- References: <4jbko6$ivo@bigboote.WPI.EDU>
- Date: 27 Mar 96 17:28:52 CST
-
-
- In article <4jbko6$ivo@bigboote.WPI.EDU>, shura@cs.wpi.edu (Alexander Schelkin) writes:
- > I have a base class (Base) and several derived classes (Derived1,
- > Derived2, ...). How can I implement a virtual operator<<?
- >
- > I would like to be able to do the following:
- >
- > If I have operator<< for Base, Derived1 and Derived2.
- >
- > Base* p1 = new Derived1;
- > Base* p2 = new Derived2;
- > cout << "Derived 1 " << (*p1) << endl;
- > cout << "Derived 2 " << (*p2) << endl;
- >
- > But in this case an output I got comes from Base class operator<<,
- > not from the derived classes.
- >
- > Please answer me to shura@cs.wpi.edu
- >
- > Thanks a lot,
- > Alexander Schelkin
-
-
- Try something like this:
-
-
- // ********* UNTESTED CODE OFF THE TOP OF MY HEAD *********
-
- class Base
- {
- . // vertical ellipsis (replace with real code)
- . //
-
- private:
- virtual ostream & display (ostream &); // inserts members of invoking
- // object into "ostream" object
- .
- .
-
- friend ostream & operator << (ostream & os, Base & b)
- {
- return b.display(os);
- }
- };
-
- class Derived1 : public Base
- {
- .
- .
-
- private:
- ostream & display (ostream &); // inserts members of invoking object
- // into "ostream" object
- .
- .
-
- friend ostream & operator << (ostream &, Base &);
- // need to declare friendship
- };
-
- class Derived2 : public Base
- {
- .
- .
-
- private:
- ostream & display (ostream &); // inserts members of invoking object
- // into "ostream" object
- .
- .
-
- friend ostream & operator << (ostream &, Base &);
- // need to declare friendship
- };
-
- // **** END OF UNTESTED CODE OFF THE TOP OF MY HEAD ****
-
-
- ----------------------------------------------- Roger Glover
- XXXX\ \ / \ /XXX \ / \ X \ /\\\ X///X /\\\ Cray Research, Inc.
- / \ / \/ /\ / \ / \X /\ X \ / \ X\ \ X DISCLAIMER HAIKU:
- //X/ X\\\X //X/ X \ X X\\ / \ X/X \ X \\\ C R I may not
- / \ X///X / \/ X//XX X \ / \ X \\ X \ Share these opinions with me
- / \ X X /\\\/ X X X///X /XXX/ X///X /XXX/ This is not my fault
- ----------------------------------------------- http://www.cray.com/education
-